package com.zm.admin.zmeng.service.impl;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zm.admin.zmeng.domain.ZmUser;
import com.zm.admin.zmeng.domain.ZmUserOrg;
import com.zm.admin.zmeng.domain.ZmUserRole;
import com.zm.admin.zmeng.mapper.ZmUserMapper;
import com.zm.admin.zmeng.mapper.ZmUserOrgMapper;
import com.zm.admin.zmeng.mapper.ZmUserRoleMapper;
import com.zm.admin.zmeng.service.ZmUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/***
 *
 * @Auther: MuYun
 * @Date: 2022/11/16 22:45
 * @Description：用户service接口实现类
 *
 */
/**开启事务后，该类所有方法将被事务管理*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ZmUserServiceImpl implements ZmUserService {

    @Resource
    private ZmUserOrgMapper zmUserOrgMapper;

    @Resource
    private ZmUserRoleMapper zmUserRoleMapper;


    @Override
    public void updateUserOrgAndRole(ZmUser user){
        //修改用户对应的角色
        if(StrUtil.isNotEmpty(user.getRoleid())){
            ZmUserRole zmUserRole=new ZmUserRole();
            zmUserRole.setUserId(user.getId().toString());
            zmUserRole.setRoleId(user.getRoleid());
            QueryWrapper<ZmUserRole> roleQueryWrapper=new QueryWrapper<>();
            UpdateWrapper<ZmUserRole> roleUpdateWrapper=new UpdateWrapper<>();
            ZmUserRole userRole = zmUserRoleMapper.selectOne(roleQueryWrapper.lambda().eq(ZmUserRole::getUserId, user.getId()));
            //先看该用户有无原角色，无原角色代表还未配置则新增，有则修改
            if(ObjectUtil.isNotEmpty(userRole)){
                zmUserRole.setUpdateTime(DateUtil.date());
                //如果存在兼任（一人俩角色），这里的逻辑就要动
                zmUserRoleMapper.update(zmUserRole,roleUpdateWrapper.lambda().eq(ZmUserRole::getUserId,user.getId()));
            }else {
                zmUserRole.setCreateTime(DateUtil.date());
                zmUserRoleMapper.insert(zmUserRole);
            }
        }
        //修改用户对应的组织
        if(StrUtil.isNotEmpty(user.getOrgid())){
            ZmUserOrg zmUserOrg =new ZmUserOrg();
            zmUserOrg.setUserId(user.getId().toString());
            zmUserOrg.setOrgId(user.getOrgid());
            QueryWrapper<ZmUserOrg> orgQueryWrapper=new QueryWrapper<>();
            UpdateWrapper<ZmUserOrg> orgUpdateWrapper=new UpdateWrapper<>();
            ZmUserOrg userOrg = zmUserOrgMapper.selectOne(orgQueryWrapper.lambda().eq(ZmUserOrg::getUserId, user.getId()));
            //先看该用户有无原组织，无原组织代表还未配置则新增，有则修改
            if(ObjectUtil.isNotEmpty(userOrg)){
                zmUserOrg.setUpdateTime(DateUtil.date());
                //跟上述有同样的缺陷
                zmUserOrgMapper.update(zmUserOrg,orgUpdateWrapper.lambda().eq(ZmUserOrg::getUserId,user.getId()));
            }else {
                zmUserOrg.setCreateTime(DateUtil.date());
                zmUserOrgMapper.insert(zmUserOrg);
            }
        }
    }
}
